<?php
/**
 * Class for thumbnailing images
 *
 * @author MichaÅ‚ Bachowski (michal@bachowski.pl)
 * @package JPL
 * @subpackage   Jpl_Filter
 * @version 0.1
 * @uses Zend_Filter_Interface, IMagick
 * @license   http://framework.zend.com/license/new-bsd     New BSD License
 */
class Custom_Filter_File_Image_Thumbnail implements Zend_Filter_Interface {
    /**
     * Thumbnail width
     *
     * @var integer
     */
    protected $_width   = '128';
    /**
     * Thumbnail height
     *
     * @var integer
     */
    protected $_height  = '128';
    /**
     * Information whether to keep ratio or not while making thumbnail
     *
     * @var bool
     */
    protected $_bestFit = true;
    /**
     * Information whether crop image or just to resize it
     *
     * @var bool
     */
    protected $_crop    = false;
    /**
     * Method sets destination thumbnail width
     *
     * @param  integer  $width
     * @return Jpl_Filter_File_Image_Thumbnail
     */
    public function setWidth( $width = null ) {
        $this->_width = (int) $width;
        return $this;
    }
    /**
     * Method sets destination thumbnail height
     *
     * @param  integer  $height
     * @return Jpl_Filter_File_Image_Thumbnail
     */
    public function setHeight( $height = null ) {
        $this->_height = (int) $height;
        return $this;
    }
    /**
     * Method changes behaviour of filter.
     * Filter will resize image exactly to given dimensions (false)
     * or resize image to fit given dimensions but keep original dimension ratio (true).
     * Setting bestFit to true both dimensions are become mandatory!
     *
     * @param  bool     $bestFit
     * @return Jpl_Filter_File_Image_Thumbnail
     */
    public function setBestFit( $bestFit = false ) {
        $this->_bestFit = (bool) $bestFit;
        return $this;
    }
    /**
     * Method changes behaviour of filter.
     * Filter either just resizes image (false)
     * or resizes with keeping ratio and crop to best fit given width and height (true)
     * If true ommits self::$_bestFit attribute!
     *
     * @param  bool $crop
     * @return Jpl_Filter_File_Image_Thumbnail
     */
    public function setCrop( $crop = false ) {
        $this->_crop = (bool) $crop;
        return $this;
    }
    /**
     * Method filters given file - makes thumb
     *
     * @param  string   $file   path to file
     * @return string   name of file
     */
    public function filter( $file ) {
        $im = new IMagick( $file );
        if ( $this->_crop ) {
            $im->cropThumbnailImage(
                $this->_width,
                $this->_height
            );
        } else {
            $im->thumbnailImage(
                $this->_width,
                $this->_height,
                $this->_bestFit
            );
        }
        $im->writeImage( $file );

		return $file;
    }
}
